package com.founder.devwork.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 存储 GitLab 用户账户信息，支持多账户关联到工程师
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("account")
public class Account {

    /**
     * 本地生成全局唯一ID（避免 GitLab ID 冲突）
     */
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;

    /**
     * GitLab 用户ID
     */
    @NotNull(message = "gitId 不能为空")
    @TableField(value = "git_id")
    private Long gitId;

    /**
     * Git实例标识，如"beijing"或"chengdu"
     */
    @NotBlank(message = "gitInstance 不能为空")
    @TableField("git_instance")
    private String gitInstance;

    /**
     * 关联工程师ID（允许 NULL，如果未合并）
     */
    @TableField("engineer_id")
    private String engineerId;

    /**
     * GitLab 用户名
     */
    @NotBlank(message = "username 不能为空")
    @TableField("username")
    private String username;

    /**
     * 用户显示名称
     */
    @TableField("acct_fullname")
    private String acctFullname;

    /**
     * 用户邮箱
     */
    @NotBlank(message = "email 不能为空")
    @TableField("email")
    private String email;

    /**
     * 用户状态
     */
    @TableField("state")
    private String state;

    /**
     * 账户创建时间
     */
    @TableField("created_at")
    private LocalDateTime createdAt;

    /**
     * 记录更新时间
     */
    @NotNull(message = "updatedAt 记录更新时间不能为空")
    @TableField("updated_at")
    private LocalDateTime updatedAt;
}
